<?php

/**
 * Factura form.
 *
 * @package    aeropostal
 * @subpackage form
 * @author     Your name here
 */
class FacturaForm extends BaseFacturaForm
{
  public function configure()
  {
      $this->setWidgets(array(
      'numero'     => new sfWidgetFormInputText(),
      'fecha'      => new sfWidgetFormInputText(),
      'proveedor'  => new sfWidgetFormPropelChoice(array('model' => 'Proveedor', 'add_empty' => '- Seleccione -')),
      'fechaTrans' => new sfWidgetFormInputText(),
      'numTrans'   => new sfWidgetFormInputText(),
      'moneda'     => new sfWidgetFormPropelChoice(array('model' => 'Moneda', 'add_empty' => '- Seleccione -')),
      'uMedida'    => new sfWidgetFormPropelChoice(array('model' => 'Unidmedida', 'add_empty' => '- Seleccione -')),
      'estacion'   => new sfWidgetFormPropelChoice(array('model' => 'Estacion', 'add_empty' => '- Seleccione -')),
      'empresa'    => new sfWidgetFormPropelChoice(array('model' => 'Compania', 'add_empty' => '- Seleccione -')),
      'transmitir' => new sfWidgetFormInputCheckbox(),
      'reclamo'    => new sfWidgetFormInputCheckbox(),
      'cantTotal'  => new sfWidgetFormInputText(),
      'total'      => new sfWidgetFormInputText(),
      'estatus'    => new sfWidgetFormInputHidden(),
    ));
      
     // Setear los errores que aparecen en el formulario
        $this->setValidators(array(
            'numero' => new sfValidatorInteger(array('min' => 0), array('required' => 'Debe especificar el n&uacute;mero de la factura.','min' => 'Valor no v&aacute;lido. Por favor inserte un n&uacute;mero de Factura v&aacute;lido','invalid'=>'El n&uacute;mero de Factura debe ser un valor num&eacute;rico')),
            'fecha' => new sfValidatorDate(array('required'=>'Requerido.')),
            'fechaTrans' => new sfValidatorPass(),
            'numTrans' => new sfValidatorPass(),
            'proveedor' => new sfValidatorPropelChoice(array('model' => 'Proveedor', 'column' => 'rif'),array('required' => 'Debe especificar el proveedor.',)),
            'moneda' => new sfValidatorPropelChoice(array('model' => 'Moneda', 'column' => 'id'),array('required' => 'Debe especificar la moneda.',)),
            'uMedida' => new sfValidatorPropelChoice(array('model' => 'UnidMedida', 'column' => 'simbolo'),array('required' => 'Debe especificar la unidad de medida.',)),
            'estacion' => new sfValidatorPropelChoice(array('model' => 'Estacion', 'column' => 'codigo'),array('required' => 'Debe especificar la estaci&oacute;n.',)),
            'empresa' => new sfValidatorPropelChoice(array('model' => 'Compania', 'column' => 'id'),array('required' => 'Debe especificar la estaci&oacute;n.',)),
            'transmitir' => new sfValidatorPass(),
            'reclamo' => new sfValidatorPass(),
            'cantTotal' => new sfValidatorNumber(array('required' => true),array('required' => 'Debe indicar la cantidad total de suministro','invalid'=>'La cantidad total de suministro debe ser un valor num&eacute;rico')),
            'total' => new sfValidatorNumber(array('required' => true),array('required' => 'Debe indicar el monto total de la Factura','invalid'=>'El monto total de la factura debe ser un valor num&eacute;rico')),
            'estatus' => new sfValidatorString(array('max_length' => 255),array('required' => 'Debe especificar el estatus')),
     ));
        
     $this->widgetSchema['cantTotal']->setAttribute('size', 16);

    //Empotramos al menos un formulario de detFactura
    $detFacturas = $this->getObject()->getdetFacturas();
    if (!$detFacturas)
    {
      $detFactura = new detFactura();
      $detFactura->setFactura($this->getObject()->getNumero());
      $detFacturas = array($detFactura);
    }
    
    //Un formulario vacío hará de contenedor para todos los detFacturas
    $detFacturas_forms = new SfForm();
    $count = 0;
    foreach ($detFacturas as $detFactura)
    {
        $det_form = new detFacturaForm($detFactura);
        //Empotramos cada formulario en el contenedor
        $detFacturas_forms->embedForm($count, $det_form);
        $count ++;
    }
    
    //Empotramos el contenedor en el formulario principal
    $this->embedForm('detFacturas', $detFacturas_forms);
     
    $this->widgetSchema->setNameFormat('factura[%s]');
    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
    
  }
  
  public function addDetFactura($num)
  {
      $detfact = new detFactura();
      $detfact->setFactura($this->getObject()->getNumero());
      $detfact_form = new detFacturaForm($detfact);

      $this->embeddedForms['detFacturas']->embedForm($num,$detfact_form);
      $this->embedForm('detFacturas',$this->embeddedForms['detFacturas']);
  } 
  
  public function bind(array $taintedValues = null, array $taintedFiles = null) 
  { 
      foreach($taintedValues['detFacturas'] as $key=>$newDetFact) 
      { 
          if (!isset($this['detFacturas'][$key])) 
          { 
              $this->addDetFactura($key); 
          } 
      } 
    parent::bind($taintedValues, $taintedFiles); 
  }  
}
